**************************************************************************************
	;Header frs File-linken

	IFD	Flag_project
Flag_main	set 1
	ENDC
	IFND	Flag_main 
Flag_main	set 0
	ENDC
	IFEQ	Flag_main
Flag_main	set 1
	include	Nutz_project
	ELSEIF
**************************************************************************************
Sky	EQU	ISLAND_SKY
Water	EQU	ISLAND_WATER
Under	EQU	ISLAND_UNDER
Tekkno	EQU	ISLAND_TEKKNO
Mickey	EQU	ISLAND_MICKEY
Natur	EQU	ISLAND_NATUR
Inka	EQU	ISLAND_INKA
Warp	EQU	-1

ColTest	EQU	0
SOUNDFX	EQU	0

World	EQU	Under
Level	EQU	1


Debug	EQU	0		;Mglichkeit, Gegnerlisten an den Debugger auszugeben.
BobAnz	EQU	0		;Zeigt bei Lifes die Gesamt-Anzahl der aktiven Bobs an.
Record	EQU	0		;1 = Aufzeichnen einer Spur
Replay	EQU	0		;1-4 = Abspielen einer Spur, 5= Record-buffer
TrainM	EQU	-1		;Trainermode im test-modus (-1/+1)

	; Aufteilung des Video-rams

	; $0000 - $xxxx	; Pattern Memory

	; $c000 - $e000	; Scroll B Pattern Table
	; $e000 - $f000	; Scroll A Pattern Table
	; $f000 -	; H-Scroll Table
	; $f400 - $f680	; Sprite Attribute Table

Start:
;-------------- First Setup --------------------------

	lea	WorkRam,a6
	bsr	Init_Interupts

	moveq	#0,d0
	lea	12(a6),a0
	lea	$ff3000,a1
.clear_loop:						;Vorraussetzungen schaffen!
	move.l	d0,(a0)+
	cmp.l	a1,a0
	blt.s	.clear_loop

	sf	Glo_Spur(a6)
	tst.b	Message_Trainer+Message_Struktur
	bmi.s	.no_trainer
	move.b	#10,Message_Flashs+Message_Struktur
	or.b	#TIMET_FLASH,Message_Fhigkeiten+Message_Struktur
.no_trainer:

	IFEQ	DoIntro
	move.b	#TYPE_NORM,Message_Type+Message_Struktur
	move.b	#World,Message_Welt+Message_Struktur
	move.b	#Level,Message_Nummer+Message_Struktur
	move.b	#8,Message_Hitpoints+Message_Struktur
	move.b	#8,Message_Taschen+Message_Struktur
	move.b	#TIMET_WINGS+TIMET_FLASH,Message_Fhigkeiten+Message_Struktur
	move.b	#3,Message_Federn+Message_Struktur
	move.b	#85,Message_Flashs+Message_Struktur
	move.b	#TrainM,Message_Trainer+Message_Struktur
	clr.b	Message_Diamanten+Message_Struktur
	move.b	#0,Message_Steuerung+Message_Struktur
	move.b	#Replay,Glo_Spur(a6)
	sf	Message_Custom+1+Message_Struktur

	IFNE	World=Warp
	move.b	#TYPE_WARP,Message_Type+Message_Struktur
	ENDC

	ENDC

	bsr	Copy_from_Message

	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d3
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	moveq	#0,d7

	move.l	d0,a0
	move.l	d0,a1
	move.l	d0,a2
	move.l	d0,a3
	move.l	d0,a4
	move.l	d0,a5

	lea	Message_Struktur,a1

	cmp.b	#TYPE_DEMO,Message_Type(a1)
	bne.s	.no_demoplay

	move.b	Message_Nummer(a1),d0
	addq.b	#1,d0
	move.b	d0,Glo_Spur(a6)
	move.b	#8,SCR_HitPoint_Soll(a6)
	move.b	#8,TEMET_ANZ_HitPoints(a6)
	move.b	#8,TEMET_MAX_HitPoints(a6)
	move.b	#8,Message_Hitpoints(a1)
	move.b	#8,Message_Taschen(a1)

	sf	SCR_Bombs_Soll(a6)
	move.b	#3,SCR_Lifes_Soll(a6)
	sf	SCR_Gems_Soll(a6)
	move.b	#TIMET_FLASH+TIMET_WINGS,Message_Fhigkeiten(a1)
	move.b	#3,Message_Federn(a1)
	move.b	#3,Message_Flashs(a1)
	move.b	#8,Message_Taschen(a1)
	sf	Message_Custom+1(a1)		;Keinen 2. Teil spielen!

.no_demoplay:

	;Falls bentigt, Spur und zugehrige Welt/Level eintragen!

	IFEQ	Record
	moveq	#0,d0
	move.b	Glo_Spur(a6),d0
	beq.s	.no_spur

	lea	Spur_Table(pc),a0
	subq.b	#1,d0
	mulu	#6,d0
	move.l	(a0,d0.w),Spur_Pointer(a6)
	move.b	4(a0,d0.w),Glo_Welt+1(a6)
	move.b	5(a0,d0.w),Glo_Level+1(a6)
	sf	Spur_counter(a6)
.no_spur:
	ENDC

	cmp.b	#1,Message_Custom+1+Message_Struktur
	bne	Kette_Game
	st	Message_Custom+1+Message_Struktur

Kette_Game:
	bsr	Init_Interupts
	move.w	#$8124,Glo_Display(a6)
	bsr	Init_Game

	bsr	Init_Level

	;Feststellen, ob ein hinterer Teil eines verketteten Levels gespielt werden soll.

	tst.b	Message_Custom+1+Message_Struktur
	bpl.s	.no_second_part

	move.w	Glo_Level(a6),d0		;Zur 2. Hlfte verzweigen, da die 1. wohl schon
	move.l	Glo_Leveltable(a6),a0		;geschafft wurde!
	mulu	#14,d0
	lea	(a0,d0.w),a0

	move.w	12(a0),d0
	bmi.s	.no_second_part			;Offenbar ein Irrtum, wir haben keine 2. Hlfte!
	move.w	d0,Glo_Level(a6)

.no_second_part:
	bsr	Init_Start_Vals

	tst.l	Water_Color(a6)			;Wasseroberflche initialisieren,
	beq.s	.no_water_surface		;falls in dieser Welt eine vorkommt!
	jsr	Make_WaterLevel
.no_water_surface:

	;Alles initialisiert, Level starten.
	bsr	Create_Playfield

	st	Frame_Flag(a6)
	move.l	#Standart_VBlank,Int_VBlank+2(a6)

	bsr	WaitVBI

	lea	Check_Game_End(pc),a0
	bsr	Append_Main_Rout

	sf	Dont_render_Parallax(a6)
	bsr	Use_MainRoutTable
	st	Frame_Flag(a6)

	move.w	#$8164,Glo_Display(a6)

	clr.w	Scr_X_Speed(a6)
	clr.w	Scr_Y_Speed(a6)

	st	Dont_render_Parallax(a6)
	lea	Fade_Struktur(a6),a0
	lea	Black_Coltab(pc),a1
	move.l	Base_Coltab(a6),a2

	move.w	#64-1,d0
	jsr	Init_Transformation
	move.w	#1,Fade_Speed(a0)

;	 Testgegner eintragen 

;		moveq	#WARP_EXIT1,d0
;		move.w	#420+2000-2000,d1
;		move.w	#200+400,d2
;		move.w	#420,d1
;		move.w	#48*16+80,d2
;		lea	Area_Enter_Vector,a1
;		bsr	Search_Bob_Entry

main_loop:
	st	Frame_Flag(a6)
	bsr	WaitVBI

	IFNE	Debug
	bsr	DebugTable
	ENDC

	bsr	Use_MainRoutTable

	tst.w	Glo_QuitCount(a6)
	beq.s	main_loop
	subq.w	#1,Glo_QuitCount(a6)
	bne	main_loop

*-------------------------------------------------------------------------------------
*----------------	Spiel wird verlassen.
*-------------------------------------------------------------------------------------

.QuitGame:
	move.w	#$8124,Glo_Display(a6)
	bsr	Init_Interupts			;Interrupts auf NOPs stellen!
	move.w	#$8124,$c00004			;Display Abwrgen.

	cmp.b	#TYPE_DEMO,Message_Type+Message_Struktur
	beq.s	.dont_stop_song
	jsr	TFMX+24				;Sound Aus
.dont_stop_song:

	;Check, ob Verkettung aktiv ist!

	tst.b	Return_Code(a6)
	ble.s	.no_kette			;Level wurde nicht gewonnen, keine Kette!

	tst.w	Glo_Kette(a6)
	bmi.s	.no_kette

	move.b	#1,Message_Custom+1+Message_Struktur	;Die 2. Levelhlfte wurde erreicht

	move.b	TEMET_ANZ_HitPoints(a6),Message_Hitpoints+Message_Struktur

	move.w	Glo_Kette(a6),Glo_Level(a6)
	bra	Kette_Game

.no_kette:

	bsr	Copy_to_Message

	IFNE	DoIntro
	rts
	ELSEIF
	jmp	$180104
	ENDC

	;Tabelle aller verfgbaren Spuren.

Spur_Table:
		dc.l	Mnatur_cpt_raw
		dc.b	Natur,10
		dc.l	Munder_cpt_raw
		dc.b	Under,7
		dc.l	Mwater_cpt_raw
		dc.b	Water,4
		dc.l	Minka_cpt_raw
		dc.b	Inka,1
	IFNE	Replay
		dc.l	Record_Buffer		;Fr Testzwecke
		dc.b	World,Level
	ENDC

Use_MainRoutTable:
	lea	Main_Rout_Table(a6),a0
					IFNE	ColTest
					move.w	#$040,d1
					ENDC
.rout_loop:
					IFNE	ColTest
					move.w	d1,d0
					bsr	SetColor
					add.w	#$020,d1
					ENDC
	move.l	(a0)+,d0
	bmi.s	.end
					IFNE	ColTest
					move.l	d1,-(sp)
					ENDC
	move.l	d0,a1
	move.l	a0,-(sp)
	jsr	(a1)
	move.l	(sp)+,a0
					IFNE	ColTest
					move.l	(sp)+,d1
					ENDC
	bra.s	.rout_loop
.end:
					IFNE	ColTest
					move	#$000,d0
					bsr	SetColor
					ENDC
	rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	CHECK GAME END
*----------------	
*----------------	Game End berprfen und evtl. nderungen
*----------------	am Main-Rout-Table vornehmen
*----------------	
*-------------------------------------------------------------------------------------

Check_Game_End:
	;-------- Read Button Status of JoyPad ------------------------------
	bsr	JoyPad

	;-------- Check any Button for QUIT if in AUTO Mode -----------------
	IFEQ	Record
	tst.b	Glo_Spur(a6)
	beq.s	.manual

	move.b	d0,d1
	and.b	#%11110000,d1		;Any Button (except D-Button) pressed ?
	bne	.fast_quit
.manual:
	ENDC
	;-------- Check START Button for PAUSE/QUIT Function ----------------
	btst	#PAD_START,d0
	bne	.toggle_pause_status

	bclr	#PAD_START,button_pressed_flags(a6)

.dont_react:

	;-------- Check Player Actions for WIN/FAIL Function ----------------
	bsr	Check_Exit_Y_Dead

	cmp.b	#1,Y_Dead_Allowed(a6)
	beq	.TOT_WEGEN_RAUSFALLEN
	tst.b	Dead(a6)
	bne	.TOT_WEGEN_ZUWENIG_HITPOINTS
	tst.b	Finish(a6)
	bne.s	.LEVEL_GESCHAFT_BZW_AM_EXIT_GEWESEN
.out:
	rts

	;-------- Quit Game, because of cancelled AUTO Mode -----------------
.fast_quit:
	moveq	#0,d0
	bsr	Quit_Game

	lea	Check_Game_End,a0		;Check Game End nicht mehr aufrufen lassen
	bsr	Search_Mickey_Main
	move.l	#RoutRts,(a5)

	rts

	;-------- Start Pause-Mode if required		     ----------------
.toggle_pause_status:
	bset	#PAD_START,button_pressed_flags(a6)	;wurde Start schon losgelassen?
	bne.s	.dont_react			;(seit der letzen Pause)

	lea	Check_Game_End,a0		;Check Game End durch Pausen-Routine ersetzen
	bsr	Search_Mickey_Main		;und aufrufen lassen (im nchsten Frame)
	move.l	#TEMET_Pause,(a5)

	rts

	;-------- Init GameExit-Procedures		     ----------------

.LEVEL_GESCHAFT_BZW_AM_EXIT_GEWESEN:
	clr.w	TEMET_Shield_Flag(a6)		;Shields clearen!
	clr.w	TEMET_Been_HitTimer(a6)		;Nicht mehr Flackern.

	lea	Check_Game_End,a0		;Check Game End lschen.
	bsr	Search_Mickey_Main
	move.l	#RoutRts,(a5)

	move.b	#150,Global_QuitVerz(a6)

	lea	TEMET_Supervisor,a0		;Neue Timet-display-routine
	bsr	Search_Mickey_Main

	tst.w	Exit_X_Pos(a6)			;Ist der Exit mitten in der Luft ??
	bpl.s	.no_fly_exit

	move.l	#Clear_JoyPad2,(a5)		;Ja!
	lea	Scroll,a0			;Scroll-routine lschen.
	bsr	Search_Mickey_Main
	move.l	#RoutRts,(a5)
	bra.s	.fly_exit

.no_fly_exit:
	move.l	#Clear_JoyPad,(a5)

.fly_exit:

	move.b	#1,Return_Code(a6)
	lea	Message_Struktur,a0
	cmp.b	#ISLAND_SKY,Glo_Welt+1(a6)
	bne.s	.No_SKY

	move.b	#1,Return_Code(a6)
	move.b	Message_Nummer(a0),d0
	lea	.Sky_Anz_Flags,a0
	move.b	(a0,d0),d0
	ext.w	d0
	cmp	Flown_Gates_Anz(a6),d0
	bls.s	.No_SKY

.MAKE_Loose:
	move.b	#0,Return_Code(a6)
	moveq	#0,d0
	moveq	#1,d1
	bsr	Play_Song
	bra.s	.NoJingle
.No_SKY:
	moveq	#0,d0
	moveq	#0,d1
	bsr	Play_Song
.NoJingle:
	rts

.Sky_Anz_Flags	dc.b	13,10,7,7


.TOT_WEGEN_ZUWENIG_HITPOINTS:
.TOT_WEGEN_RAUSFALLEN:
	moveq	#0,d0
	moveq	#1,d1
	bsr	Play_Song

	moveq	#23,d0
	jsr	TFMX+16

	lea	TEMET_Supervisor,a0		;Neue Timet-display-routine
	bsr	Search_Mickey_Main
	bne.s	.not_1
	move.l	#Display_Dead_Timet,(a5)
	bra.s	.was_1
.not_1:
	lea	TEMET_WarpSupervisor,a0
	bsr	Search_Mickey_Main
	move.l	#Display_Dead_Timet,(a5)
.was_1:
	lea	Check_Game_End,a0		;Check Game End lschen.
	bsr	Search_Mickey_Main
	move.l	#RoutRts,(a5)
	lea	Scroll,a0
	bsr	Search_Mickey_Main
	move.l	#RoutRts,(a5)

	clr.w	Scr_X_Real_Speed(a6)
	clr.w	Scr_Y_Real_Speed(a6)

	move.l	#-$00020000,TEMET_Anim_Delay(a6)
	clr.w	TEMET_Anim_Delay+4(a6)
	move.w	#150,TEMET_MaxSpeed(a6)

	rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	TEMET Exit Handler (langsames Abbremsen etc.)
*----------------
*-------------------------------------------------------------------------------------

Clear_JoyPad:
	clr.b	Glo_JoyPad(a6)			;Alle Richtungen lschen.
	jsr	TEMET_Supervisor
Clear_JoyPad2:
	subq.b	#1,Global_QuitVerz(a6)
	beq.s	.quit_the_game
	rts

.quit_the_game:
	moveq	#+1,d0			;****** Level_Done-returncode ******
	cmp.b	#ISLAND_SKY,Glo_Welt+1(a6)
	bne.s	.No_SKY
	move.b	Return_Code(a6),d0
.No_SKY:
	tst.b	Return_Code(a6)
	bpl.s	.OKAY
	moveq	#-1,d0
	move.b	Return_Code(a6),d0
.OKAY	bra	Quit_Game


**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	TEMET Pause
*----------------
*----------------	"CONTINUE / QUIT" Handler
*----------------
*-------------------------------------------------------------------------------------

TEMET_Pause:

	tst.b	Message_Trainer+Message_Struktur
	bpl.s	.dont_hide_timet

		move.w	#128+115,d0			;X-Pos des Textes

	move.w	Water_SpritePos(a6),d2			;Checken, ob der Text in Y-dir
	add.w	#122,d2					;ausreichend weit von der Wasser-
		move.w	#128+80,d1			;Oberflche weg ist.
	cmp.w	#128+80+30,d2
	bgt.s	.y_ok
	cmp.w	#128+80-16,d2
	blt.s	.y_ok
		move.w	#128+80+30,d1			;Ansonsten diese Pos benutzen!
.y_ok:

	tst.b	TEMET_Add_Flag(a6)
	beq.s	.dont_add
	sub.l	#DMA_ENTRY_LENGTH,DMA_Pointer(a6)	;Letzten Eintrag (Durch Show_Player her-
	move.l	DMA_Pointer(a6),a2			;gestellt) wieder austragen ;-)
	move.w	#-1,DMA_Dest_Adress(a2)
.dont_add:
		moveq	#0,d2
		move.w	TEMET_Prio(a6),d3

		lea	Continue_Obj0,a0		;Sprites fr "CONTINUE / QUIT"
		jsr	Show_Player_Data		;anmelden
		jsr	Show_Player


.dont_hide_timet:
	IFNE	Coords
	bsr	Add_Coord_Sprites
	ENDC

	st	Frame_Flag(a6)				;vom VBlank-Handler Sprite-liste
	bsr	WaitVBI					;des aktuellen Frames bernehmen lassen!

	jsr	TFMX+24

	;Farben setzen

	tst.b	Message_Trainer+Message_Struktur
	bpl.s	.dont_kill_timet

	lea	Fade_Struktur+Fade_Palette+64(a6),a1	;Farben fr die Schrift einstellen
	move	#$0eee,20(a1)
	move	#$000e,22(a1)

	move.l	#.flash_text,Int_VBlank+2(a6)		;Animieren des Sprites im VBI installieren

.dont_kill_timet:
	;Pause bearbeiten.

	move.b	#1,second_start_release(a6)
	move.b	#1,Cont_Which(a6)
	sf	Cont_Verz(a6)
	sf	Cont_Show(a6)

.pause_loop:
	move.w	$c00004,d0
	btst	#3,d0				;Main-loop der Pausen-routine
	beq.s	.pause_loop
	bsr	WaitVBIEnd

	bsr	JoyPad

	bsr	.control_normal			;Buttons abfragen, funktionen steuern.
	bne.s	.quit_pause			;Pause soll verlassen werden.

	moveq	#7,d7
	bsr	Ask_Button_Released
	beq	.pause_loop

	subq.b	#1,second_start_release(a6)
	bpl	.pause_loop

	move.b	#1,Cont_Which(a6)

.quit_pause:
	move.l	#Standart_VBlank,Int_VBlank+2(a6)

	lea	TEMET_Pause(pc),a0
	bsr	Search_Mickey_Main
	move.l	#Check_Game_End,(a5)

	cmp.b	#2,Cont_Which(a6)
	bne.s	.no_quit

	move.b	Trainer_Return(a6),d0	;****** Escape-returncode ******
	bsr	Quit_Game		;Oder bei Trainer ein eingestellter code.

.no_quit:
	move.w	$c00004,d0
	btst	#3,d0
	beq.s	.no_quit
	bsr	WaitVBIEnd

	bsr	Use_MainRoutTable

	cmp.b	#2,Cont_Which(a6)	;Ist es Quit ??
	beq.s	.no_sound_start		;wenn ja, keinen Sound starten.

	moveq	#0,d0			;Den zuletzt gespielten Sound
	moveq	#0,d1			;wieder starten
	move.b	SongFile(a6),d0
	move.b	SongNr(a6),d1

	bsr	Play_Song

.no_sound_start:
	rts

.control_normal:
	tst.b	Message_Trainer+Message_Struktur
	bpl	.control_trainer

	btst	#PAD_LEFT,d0
	beq.s	.no_set1

	cmp.b	#1,Cont_Which(a6)
	beq.s	.no_set1
	move.b	#1,Cont_Which(a6)
	sf	Cont_Verz(a6)
	sf	Cont_Show(a6)

.no_set1:
	btst	#PAD_RIGHT,d0
	beq.s	.no_set2

	cmp.b	#2,Cont_Which(a6)
	beq.s	.no_set2
	move.b	#2,Cont_Which(a6)
	sf	Cont_Verz(a6)
	sf	Cont_Show(a6)

.no_set2:

	moveq	#PAD_B,d7
	bsr	Ask_Button_Released
	bne.s	.return_quit
	moveq	#PAD_C,d7
	bsr	Ask_Button_Released
	bne.s	.return_quit
	moveq	#PAD_A,d7
	bsr	Ask_Button_Released
	bne.s	.return_quit

	moveq	#0,d1
	rts

.return_quit:
	moveq	#1,d1
	rts

	;Pad abfragen & Funktionen fr den Trainer
.control_trainer:
	btst	#PAD_LEFT,d0
	beq.s	.no_left
	clr.b	SCR_Gems_Soll(a6)
.no_left:
	btst	#PAD_RIGHT,d0
	beq.s	.no_right
	move.b	#$99,SCR_Gems_Soll(a6)
.no_right:
	btst	#PAD_UP,d0
	beq.s	.no_up
	move.b	#+1,Trainer_Return(a6)
.no_up:
	btst	#PAD_DOWN,d0
	beq.s	.no_down
	move.b	#-1,Trainer_Return(a6)
.no_down:
	moveq	#PAD_B,d7
	bsr	Ask_Button_Released
	bne.s	.cycle_shields
	moveq	#PAD_C,d7
	bsr	Ask_Button_Released
	bne.s	.quit_game
	moveq	#PAD_A,d7
	bsr	Ask_Button_Released
	bne.s	.recover_hps

	moveq	#0,d1
	rts

.recover_hps:
	move.b	TEMET_MAX_HitPoints(a6),TEMET_ANZ_HitPoints(a6)
	move.b	TEMET_MAX_HitPoints(a6),SCR_HitPoint_Soll(a6)
	bra.s	.return_quit

.cycle_shields:
	cmp.w	#1,TEMET_Shield_Flag(a6)
	beq.s	.set2
	move	#1,TEMET_Shield_Flag(a6)
	move	#-1,TEMET_Been_HitTimer(a6)
	bra.s	.return_quit
.set2:
	move	#2,TEMET_Shield_Flag(a6)
	move	#12*60,TEMET_Been_HitTimer(a6)
	bra.s	.return_quit

.quit_game:
	move.b	#2,Cont_Which(a6)		;Ist vlliges QUIT
	bra	.return_quit

	;----------------------------------------------------------------------------------
	;-------- VBlank Handler fuer Continue-anim				   --------

.flash_text:
	movem.l	d0-d2/a0-a2,-(sp)
	lea	Continue_raw,a0

	subq.b	#1,Cont_Verz(a6)
	bpl.s	.no_anim
	move.b	#15,Cont_Verz(a6)
	not.b	Cont_Show(a6)
	beq.s	.show_cont

	moveq	#0,d0
	move.b	Cont_Which(a6),d0
	mulu	#768,d0
	add.w	d0,a0

.show_cont:
	move.w	#768,d0
	lea	Nutz_VRam,a1
	bsr	LoadVRam
.no_anim:
	movem.l	(sp)+,d0-d2/a0-a2

	jmp	Standart_VBlank

	even

**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	CHECK EXIT OR Y-DEAD
*-------------------------------------------------------------------------------------
Check_Exit_Y_Dead	*--*>Check Exit reached ?

		move	TEMET_X_Position(a6),d0
		add.w	#12,d0
		move.w	Exit_X_Pos(a6),d1
		and.w	#$7fff,d1
		sub	d1,d0
		bmi.s	.NoLevelFin
		tst.w	Glo_Kette(a6)		;Ist es ein Exit oder ein Cuepoint ??
		bmi.s	.no_cuepoint
		sub.w	#20+12,d0		;Es ist ein Cuepoint, schmales Hitframe!
		bra.s	.test
.no_cuepoint:
		sub	#64+12,d0		;Es ist ein Exit, volles Hitframe!
.test:
		bpl.s	.NoLevelFin

		move	TEMET_Y_Position(a6),d0
		add	#20-8,d0
		sub	Exit_Y_Pos(a6),d0
		bmi.s	.NoLevelFin
		sub	#32+8,d0
		bpl.s	.NoLevelFin
		*--*>LEVEL FINI
		move.b	#1,Finish(a6)

		rts

.NoLevelFin:
		*--*>Check YDEAD
		tst.b	Y_Dead_Allowed(a6)
		bne.s	.NoCheckAllowed

		move	Scr_Y_Max(a6),d0
		add.w	#150,d0
		move	TEMET_Y_Position(a6),d1
		bmi.s	.NoCheckAllowed
		cmp	d1,d0
		bhi.s	.NoCheckAllowed
		*--*>Y DEAD
		move.b	#1,Y_Dead_Allowed(a6)	;TOT WEGEN RAUSFALLEN
.NoCheckAllowed	rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	Kommunikation mit Karte
*-------------------------------------------------------------------------------------

Copy_from_Message:
	lea	Message_Struktur,a1
	move.b	Message_Hitpoints(a1),SCR_HitPoint_Soll(a6)
	move.b	Message_Hitpoints(a1),TEMET_ANZ_HitPoints(a6)
	move.b	Message_Taschen(a1),TEMET_MAX_HitPoints(a6)

	moveq	#0,d0
	move.b	Message_Bomben(a1),d0
	bsr	Convert_binary_BCD
	move.b	d0,SCR_Bombs_Soll(a6)

	moveq	#0,d0
	move.b	Message_Leben(a1),d0
	bsr	Convert_binary_BCD
	move.b	d0,SCR_Lifes_Soll(a6)

	moveq	#0,d0
	move.b	Message_Diamanten(a1),d0
	bsr	Convert_binary_BCD
	move.b	d0,SCR_Gems_Soll(a6)

	moveq	#0,d0
	move.b	Message_Nummer(a1),d0
	move.w	d0,Glo_Level(a6)
	move.b	Message_Welt(a1),d0
	move.w	d0,Glo_Welt(a6)

	;Control setzen.

	lea	JoyControl_Flags(pc),a0
	move.b	Message_Steuerung(a1),d0
	and.w	#$000f,d0
	asl.w	#2,d0
	move.b	(a0,d0.w),FJump_Bit(a6)
	move.b	1(a0,d0.w),Jump_Bit(a6)
	move.b	2(a0,d0.w),Flash_Bit(a6)

	rts

JoyControl_Flags:
	dc.b	PAD_B		;FJump
	dc.b	PAD_C		;Jump
	dc.b	PAD_A,0		;Flash

	dc.b	PAD_C		;FJump
	dc.b	PAD_B		;Jump
	dc.b	PAD_A,0		;Flash

	dc.b	PAD_A		;FJump
	dc.b	PAD_B		;Jump
	dc.b	PAD_C,0		;Flash

Copy_to_Message:
	lea	Message_Struktur,a1
	move.b	Return_Code(a6),Message_Custom(a1)
	beq.s	.Nutz_quitted

	move.b	TEMET_ANZ_HitPoints(a6),Message_Hitpoints(a1)

	moveq	#0,d0
	move.b	SCR_Bombs_Soll(a6),d0
	bsr	Convert_BCD_binary
	move.b	d0,Message_Bomben(a1)

	moveq	#0,d0
	move.b	SCR_Lifes_Soll(a6),d0
	bsr	Convert_BCD_binary
	move.b	d0,Message_Leben(a1)

	tst.b	Return_Code(a6)
	bmi.s	.Nutz_Died

	moveq	#0,d0
	move.b	SCR_Gems_Soll(a6),d0
	bsr	Convert_BCD_binary
	move.b	d0,Message_Diamanten(a1)
.Nutz_quitted:
	rts

.Nutz_Died:
	clr.b	Message_Diamanten(a1)
	rts

Convert_BCD_binary:
	move.l	d0,d1
	lsr.b	#4,d1
	mulu	#10,d1
	and.w	#$f,d0
	add.w	d1,d0
	rts

Convert_binary_BCD:
	divu	#10,d0
	asl.b	#4,d0
	move.b	d0,d1
	swap	d0
	or.b	d1,d0
	rts

**************************************************************************************
*-------------------------------------------------------------------------------------
*----------------	INIT START VALS
*-------------------------------------------------------------------------------------
Init_Start_Vals:	*--*>Init Vals from Enemy Structure

	;Level ins WorkRam decrunchen

	move.w	Glo_Level(a6),d0

	move.l	Glo_Leveltable(a6),a0
	mulu	#14,d0
	lea	(a0,d0.w),a0

	;Exit-Position setzen!

	move.w	8(a0),d0
	move.w	d0,Exit_X_Pos(a6)
	move.w	10(a0),d0
	move.w	d0,Exit_Y_Pos(a6)
	clr.w	Exit_AnVerz(a6)

	;Level-Verkettung initialisieren.

	move.w	12(a0),Glo_Kette(a6)

	;Level & Area-Liste entpacken.

	move.l	4(a0),-(sp)
	move.l	(a0),a0
	lea	Area_Vector(a6),a5
	bsr	Decrunch
	move.l	(sp)+,a0
	lea	Scratch_Buffer(a6),a5
	bsr	Decrunch

	*--*>Init Block and Bit Pointer 

	lea	Scratch_Buffer+8(a6),a0
	move.l	a0,Scr_Level(a6)
	subq.l	#8,a0
	add.l	(a0),a0
	move.l	a0,Scr_Level_Bits(a6)

	IFNE	Debug
	bsr	CheckSum
	ENDC

	;Level-Start initialisierung

		lea	Area_Vector(a6),a0

		;clr.w	Scr_X_Fix(a6)
		;move	#76*16,L_LE_X_POS(a0)
		;move	#7*16,L_LE_Y_POS(a0)
		;move	#2*16,L_LE_WIDTH(a0)
		;move	#5*16,L_LE_HIGHT(a0)
		move	L_Scr_Level_Width(a0),d0
		lsr	#1,d0
		move	d0,Scr_Level_Width(a6)
		;move	L_Scr_X_Max(a0),Scr_X_Max(a6)
		move	L_Scr_Y_Max(a0),Scr_Y_Max(a6)
		move	L_Scr_BA_Anz_Area_X(a0),Scr_BA_Anz_Area_X(a6)
		;move	L_Scr_BA_Anz_Area_Y(a0),Scr_BA_Anz_Area_Y(a6)
		*--*>Init LevelStartpos
		move	L_Scr_X_Level_Pos(a0),d1
		sub	#16,d1
		cmp.w	#16,d1
		bge	.Level_X_Positiv
		moveq	#16,d1
.Level_X_Positiv
		move	d1,Scr_X_Level_Pos(a6)
		move	d1,Scr_X_Level_Pos_Old(a6)
		move	L_Scr_Y_Level_Pos(a0),d1
		sub	#32,d1
		bpl	.Level_Y_Positiv
		moveq	#0,d1
.Level_Y_Positiv
		move	d1,Scr_Y_Level_Pos(a6)
		move	d1,Scr_Y_Level_Pos_Old(a6)
		move	L_TEMET_START_X(a0),TEMET_X_Position(a6)
		move	L_TEMET_START_Y(a0),TEMET_Y_Position(a6)

		sub	#32,TEMET_Y_Position(a6)
		bpl	.TEMET_Y_Positiv
		clr	TEMET_Y_Position(a6)
.TEMET_Y_Positiv

		*--*>Init Waterstartpos
		move	L_WaterBase(a0),WaterBase(a6)
		bne.s	.dont_set_dummy
		move.w	#$d0*16,WaterBase(a6)
.dont_set_dummy:
		move	L_LAVABase(a0),LAVABase(a6)
		move	L_PARABase(a0),PARABase(a6)

		*--*>Init Anzahl der Tore fr Sky
		;move	#13,L_Sky_Anz(a0)

	*--*>Init Area
	lea	Area_Vector+L_EXTRA_Tab(a6),a0
	bsr	Init_Extra_Tab

	lea	Scratch_Buffer+4(a6),a0
	move	(a0),d0
	sub	#$160,d0
	lea	Area_Vector+L_Area_Vector(a6),a0
	bsr	Init_Areas

	bsr	Init_Block_Tables

		rts

*-------------------------------------------------------------------------------------

Init_Level:
	lea	Message_Struktur,a0
	cmp.b	#TYPE_WARP,Message_Type(a0)
	beq	.Init_Warpzone

	cmp.b	#ISLAND_SKY,Glo_Welt+1(a6)
	beq.s	.Init_Sky
	cmp.b	#ISLAND_WATER,Glo_Welt+1(a6)
	beq	.Init_Water
	cmp.b	#ISLAND_UNDER,Glo_Welt+1(a6)
	beq	.Init_Under
	cmp.b	#ISLAND_TEKKNO,Glo_Welt+1(a6)
	beq	.Init_Tekkno
	cmp.b	#ISLAND_MICKEY,Glo_Welt+1(a6)
	beq	.Init_Mickey
	cmp.b	#ISLAND_NATUR,Glo_Welt+1(a6)
	beq	.Init_Natur
	cmp.b	#ISLAND_INKA,Glo_Welt+1(a6)
	beq	.Init_Inka

.Init_Sky:
	move.l	#MakeSkyPara,(a5)+
	move.l	#-1,(a5)

	jsr	Init_SkyParallax

	move.l	#SKY_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

	lea	Sky_world_bin_p,a0
	move.w	#160,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Sky_Coltab,Base_Coltab(a6)
	lea	SkyWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.w	#Nutz_VRam/32+$8000,TEMET_Prio(a6)
	move.l	#Sky_Leveltable,Glo_Leveltable(a6)
	sf	Y_Dead_Allowed(a6)
	move.l	#GemVram_Sky,GemVramAdrs(a6)

	*--*Write Infos for SKY !!
	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#GATE_BLUE_Info-Bob_Info_Start,2*FLAG_BLUE_EASY(a1)
	move	#FLAG_BLUE_Info-Bob_Info_Start,2*FLAG_BLUE(a1)
	move	#Cloud_Info-Bob_Info_Start,2*CLOUD_FAST(a1)

	move	#ARROW_L_Info-Bob_Info_Start,2*SARROW_L(a1)
	move	#ARROW_LU_Info-Bob_Info_Start,2*SARROW_LU(a1)
	move	#ARROW_U_Info-Bob_Info_Start,2*SARROW_U(a1)
	move	#ARROW_RU_Info-Bob_Info_Start,2*SARROW_RU(a1)
	move	#ARROW_R_Info-Bob_Info_Start,2*SARROW_R(a1)
	move	#ARROW_RD_Info-Bob_Info_Start,2*SARROW_RD(a1)
	move	#ARROW_D_Info-Bob_Info_Start,2*SARROW_D(a1)
	move	#ARROW_LD_Info-Bob_Info_Start,2*SARROW_LD(a1)
	move	#S_EXTRAK_Te_I-Bob_Info_Start,d0
	jsr	Init_Globals

	moveq	#8,d0
	moveq	#0,d1
	bra	Play_Song

.Init_Water:
	move.l	#MakeWaterPara,(a5)+
	move.l	#-1,(a5)
	jsr	Init_WaterParallax
	move.l	#WATER_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

;	moveq	#8,d7
;	bsr	Init_Slots

	lea	water_world_bin_p,a0
	move.w	#260,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Water_Coltab,Base_Coltab(a6)
	lea	WaterWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.w	#Nutz_VRam/32,TEMET_Prio(a6)
	move.l	#Water_Leveltable,Glo_Leveltable(a6)
	st	Y_Dead_Allowed(a6)
	move.l	#GemVram_Water,GemVramAdrs(a6)

	*--*Write Infos for WATER !
	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#S_STRUDEL_UP_I-Bob_Info_Start,2*S_STRUDEL_UP(a1)
	move	#S_STRUDEL_DOWN_I-Bob_Info_Start,2*S_STRUDEL_DOWN(a1)
	move	#S_STRUDEL_LEFT_I-Bob_Info_Start,2*S_STRUDEL_LEFT(a1)
	move	#S_STRUDEL_RIGHT_I-Bob_Info_Start,2*S_STRUDEL_RIGHT(a1)
	move	#S_SEEIGEL_I-Bob_Info_Start,2*S_Seeigel(a1)
	move	#S_WBOX_DAMAGE_I-Bob_Info_Start,2*G_BOX_DAMAGE(a1)
	move	#S_Box_Gem_I-Bob_Info_Start,2*S_Box_Gem(a1)
	move	#S_Krug_Gem_I-Bob_Info_Start,2*S_Krug_Gem(a1)
	move	#S_WKRUG_DAMAGE_I-Bob_Info_Start,2*S_KRUG_DAMAGE(a1)
	move	#S_Muschel_I-Bob_Info_Start,2*S_Muschel(a1)
	move	#S_Fatfisch_R_I-Bob_Info_Start,2*S_Fatfisch_R(a1)
	move	#S_Fatfisch_L_I-Bob_Info_Start,2*S_Fatfisch_L(a1)
	move	#S_FAT_SHOOT_I-Bob_Info_Start,2*S_FAT_SHOOT(a1)
	move	#S_Smile_R_I-Bob_Info_Start,2*S_Smile_R(a1)
	move	#S_Smile_L_I-Bob_Info_Start,2*S_Smile_L(a1)
	move	#S_Smile_Body_R_I-Bob_Info_Start,2*S_Smile_Body_R(a1)
	move	#S_Smile_Body_L_I-Bob_Info_Start,2*S_Smile_Body_L(a1)
	move	#S_Huhn_R_I-Bob_Info_Start,2*S_Huhn_R(a1)
	move	#S_Huhn_L_I-Bob_Info_Start,2*S_Huhn_L(a1)
	move	#S_Sgefisch_R_I-Bob_Info_Start,2*S_Sgefisch_R(a1)
	move	#S_Sgefisch_L_I-Bob_Info_Start,2*S_Sgefisch_L(a1)
	move	#S_WDOOR_I-Bob_Info_Start,2*S_WDOOR(a1)

	move	#S_EXTRAK_Wa_I-Bob_Info_Start,d0
	jsr	Init_Globals

	moveq	#3,d0
	moveq	#0,d1
	bsr	Play_Song

	rts

.Init_Under:
	move.l	#Make_WaterLevel,(a5)+
	move.l	#Show_FogSprites,(a5)+
	move.l	#-1,(a5)
	jsr	Init_WaterEffekt
	move.l	#UNDER_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

;	moveq	#5,d7
;	bsr	Init_Slots

	lea	Under_world_bin_p,a0
	move.w	#260,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Under_Coltab,Base_Coltab(a6)
	lea	UnderWorldLoadList(pc),a0
	bsr	Execute_LoadList

	jsr	Init_UnderParallax	;Wegen Macros!

	move.l	#Under_Leveltable,Glo_Leveltable(a6)

	move.w	#Nutz_VRam/32,TEMET_Prio(a6)
	st	Y_Dead_Allowed(a6)
	move.l	#GemVram_Under,GemVramAdrs(a6)

	*--*Write Infos for UNDER !
	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#S_LAMP_I-Bob_Info_Start,2*S_LAMP(a1)
	move	#S_FIRE_I-Bob_Info_Start,2*S_FIRE(a1)
	move	#S_UBUMPER_I-Bob_Info_Start,2*S_UBUMPER(a1)

	move	#S_KRON_SHORT_I-Bob_Info_Start,2*S_KRON_SHORT(a1)
	move	#S_KRON_LONG_I-Bob_Info_Start,2*S_KRON_LONG(a1)
	move	#S_MOV_X_WAIT_I-Bob_Info_Start,2*S_MOV_X_WAIT(a1)
	move	#S_MOV_X_MOVE_I-Bob_Info_Start,2*S_MOV_X_MOVE(a1)
	move	#S_MOV_Y_WAIT_I-Bob_Info_Start,2*S_MOV_Y_WAIT(a1)
	move	#S_MOV_Y_MOVE_I-Bob_Info_Start,2*S_MOV_Y_MOVE(a1)
	move	#S_MOV_Y_KETTE_M_I-Bob_Info_Start,2*S_MOV_Y_KETTE_M(a1)
	move	#S_MOV_Y_KETTE_W_I-Bob_Info_Start,2*S_MOV_Y_KETTE_W(a1)
	move	#S_MOV_X_W_SRE_I-Bob_Info_Start,2*S_MOV_X_W_SRE(a1)
	move	#S_MOV_X_M_SRE_I-Bob_Info_Start,2*S_MOV_X_M_SRE(a1)
	move	#S_MOV_X_SRE_S_I-Bob_Info_Start,2*S_MOV_X_SRE_S(a1)
	move	#S_MOV_X_SRE_L_I-Bob_Info_Start,2*S_MOV_X_SRE_L(a1)
	move	#S_FALL_1_I-Bob_Info_Start,2*S_FALL_1(a1)

	move	#S_GHOST_I-Bob_Info_Start,2*S_GHOST(a1)
	move	#S_BOX_GEMS_I-Bob_Info_Start,2*S_BOX_GEMS(a1)
	move	#S_BOX_GHOST_I-Bob_Info_Start,2*S_BOX_GHOST(a1)
	move	#S_UBOX_DAMAGE_I-Bob_Info_Start,2*G_BOX_DAMAGE(a1)
	move	#S_BOX_HUHN_I-Bob_Info_Start,2*S_BOX_HUHN(a1)
	move	#S_FASS_I-Bob_Info_Start,2*S_FASS(a1)
	move	#S_HUHN_FASS_RIGHT_I-Bob_Info_Start,2*S_HUHN_FASS_RIGHT(a1)
	move	#S_HUHN_FASS_LEFT_I-Bob_Info_Start,2*S_HUHN_FASS_LEFT(a1)
	move	#S_HUHN_RIGHT_I-Bob_Info_Start,2*S_HUHN_RIGHT(a1)
	move	#S_HUHN_LEFT_I-Bob_Info_Start,2*S_HUHN_LEFT(a1)
	move	#S_HUHN_Mull_I-Bob_Info_Start,2*S_HUHN_Mull(a1)
	move	#S_UDOOR_I-Bob_Info_Start,2*S_UDOOR(a1)
	move	#SU_BUT_D_UP_I-Bob_Info_Start,2*SU_BUT_D_UP(a1)
	move	#SU_BUT_W_DOWN_I-Bob_Info_Start,2*SU_BUT_W_DOWN(a1)
	move	#SU_BUT_W_UP_I-Bob_Info_Start,2*SU_BUT_W_UP(a1)
	move	#SU_BUT_NOTHING_I-Bob_Info_Start,2*SU_BUT_NOTHING(a1)
	move	#SU_FISH_I-Bob_Info_Start,2*SU_FISH(a1)

	move	#Gl_EFF_W_UP_I-Bob_Info_Start,2*S_EFF_W_UP(a1)
	move	#Gl_EFF_W_DOWN_I-Bob_Info_Start,2*S_EFF_W_DOWN(a1)
	move	#Gl_WATER_COME_I-Bob_Info_Start,2*S_UNDER_COME(a1)

	move	#S_EXTRAK_Un_I-Bob_Info_Start,d0
	jsr	Init_Globals

	*UNDER
	move.w	#5*16,UnderWaterMax(a6)
	move.w	#4,UnderWaterShift(a6)
	move.w	#1,UnderWaterTest(a6)

	moveq	#4,d0
	moveq	#0,d1
	bsr	Play_Song

	rts

.Init_Tekkno:
	jsr	Init_TekknoParallax

	move.l	#TEKKNO_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)
	clr.w	Fontne_Free(a6)

	lea	Tekkno_world_bin_p,a0
	move.w	#260,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Tekkno_Coltab,Base_Coltab(a6)
	lea	TekknoWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.l	#Tekkno_Leveltable,Glo_Leveltable(a6)

	move.w	#Nutz_VRam/32,TEMET_Prio(a6)
	move.w	#Tekkno_EnemyVRam/32,Boss_VRam(a6)
	st	Y_Dead_Allowed(a6)
	move.l	#GemVram_Tekkno,GemVramAdrs(a6)

	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#S_UBUMPER_I-Bob_Info_Start,2*ST_BUMPER_SOLID(a1)
	move	#S_UBUMPER_I-Bob_Info_Start,2*ST_BUMPER_NORM(a1)

	move	#ST_MOV_X_WAIT_I-Bob_Info_Start,2*ST_MOV_X_WAIT(a1)
	move	#ST_MOV_X_MOVE_I-Bob_Info_Start,2*ST_MOV_X_MOVE(a1)
	move	#ST_MOV_Y_WAIT_I-Bob_Info_Start,2*ST_MOV_Y_WAIT(a1)
	move	#ST_MOV_Y_MOVE_I-Bob_Info_Start,2*ST_MOV_Y_MOVE(a1)
	move	#ST_MOV_NOTHING_I-Bob_Info_Start,2*ST_MOV_NOTHING(a1)
	move	#ST_MOV_W_WAIT_I-Bob_Info_Start,2*ST_MOV_W_WAIT(a1)
	move	#ST_MOV_W_MOVE_I-Bob_Info_Start,2*ST_MOV_W_MOVE(a1)
	move	#ST_MOV_W_NOTHING_I-Bob_Info_Start,2*ST_MOV_W_NOTHING(a1)

	move	#ST_BUMPER_I-Bob_Info_Start,2*ST_BUMPER_SOLID(a1)
	move	#ST_BUMPER_I-Bob_Info_Start,2*ST_BUMPER_NORM(a1)
	move	#ST_DOOR_I-Bob_Info_Start,2*ST_DOOR_LR_UP(a1)
	move	#ST_DOOR_I-Bob_Info_Start,2*ST_DOOR_L_UP(a1)
	move	#ST_DOOR_I-Bob_Info_Start,2*ST_DOOR_R_UP(a1)
	move	#ST_DOOR_I-Bob_Info_Start,2*ST_DOOR_BUT_UP(a1)

	move	#ST_FLYER_I-Bob_Info_Start,2*ST_FLYER(a1)
	move	#ST_FLYER_LEFT_I-Bob_Info_Start,2*ST_FLYER_LEFT(a1)

	move	#ST_HUHN_I-Bob_Info_Start,2*ST_HUHN(a1)
	move	#ST_HUHN_LEFT_I-Bob_Info_Start,2*ST_HUHN_LEFT(a1)
	move	#ST_ROCKET_I-Bob_Info_Start,2*ST_ROCKET(a1)
	move	#ST_FLAMES_Up_01_I-Bob_Info_Start,2*ST_FLAMES_Up_01(a1)
	move	#ST_FLAMES_Up_02_I-Bob_Info_Start,2*ST_FLAMES_Up_02(a1)
	move	#ST_FLAMES_Up_03_I-Bob_Info_Start,2*ST_FLAMES_Up_03(a1)
	move	#ST_FLAMES_Up_04_I-Bob_Info_Start,2*ST_FLAMES_Up_04(a1)
	move	#ST_FLAME_Up_I-Bob_Info_Start,2*ST_FLAME_Up(a1)
	move	#ST_BUT_DOOR_UP_I-Bob_Info_Start,2*ST_BUT_DOOR_UP(a1)
	move	#ST_BUT_VENTI_OFF_I-Bob_Info_Start,2*ST_BUT_VENTI_OFF(a1)
	move	#ST_BUT_VENTI_ON_I-Bob_Info_Start,2*ST_BUT_VENTI_ON(a1)
	move	#ST_BUT_WATER_UP_B_I-Bob_Info_Start,2*ST_BUT_WATER_UP_B(a1)
	move	#ST_BUT_WATER_DOWN_B_I-Bob_Info_Start,2*ST_BUT_WATER_DOWN_B(a1)
	move	#ST_VENTI_UP_I-Bob_Info_Start,2*ST_VENTI_UP(a1)
	move	#ST_VENTI_DOWN_I-Bob_Info_Start,2*ST_VENTI_DOWN(a1)
	move	#ST_VENTI_LEFT_I-Bob_Info_Start,2*ST_VENTI_LEFT(a1)
	move	#ST_VENTI_RIGHT_I-Bob_Info_Start,2*ST_VENTI_RIGHT(a1)
	move	#ST_FISH_RIGHT_I-Bob_Info_Start,2*ST_FISH_RIGHT(a1)
	move	#ST_FISH_LEFT_I-Bob_Info_Start,2*ST_FISH_LEFT(a1)

	move	#Gl_EFF_W_UP_I-Bob_Info_Start,2*ST_EF_W_UP(a1)
	move	#Gl_EFF_W_DOWN_I-Bob_Info_Start,2*ST_EF_W_DOWN(a1)
	move	#Gl_WATER_COME_I-Bob_Info_Start,2*ST_WATER_COME(a1)

	move	#ST_STACHEL_01_I-Bob_Info_Start,2*ST_STACHEL_01(a1)
	move	#ST_STACHEL_02_I-Bob_Info_Start,2*ST_STACHEL_02(a1)
	move	#ST_STACHEL_03_I-Bob_Info_Start,2*ST_STACHEL_03(a1)
	move	#ST_STACHEL_04_I-Bob_Info_Start,2*ST_STACHEL_04(a1)

	move	#ST_FONTNE_I-Bob_Info_Start,2*ST_FONTNE(a1)

	move	#S_EXTRAK_Te_I-Bob_Info_Start,d0
	jsr	Init_Globals

		*TEKKNO
	move.w	#5*64,UnderWaterMax(a6)
	move.w	#6,UnderWaterShift(a6)
	move.w	#0,UnderWaterTest(a6)

	moveq	#6,d0
	moveq	#0,d1
	bsr	Play_Song

	rts

.Init_Natur:
	move.l	#Make_WaterLevel,(a5)+
	move.l	#-1,(a5)

	jsr	Init_WaterEffekt
	jsr	Init_NatureParallax
	move.l	#NATUR_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

;	moveq	#5,d7
;	bsr	Init_Slots

	lea	Nature_world_bin_p,a0
	move.w	#260,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Nature_Coltab,Base_Coltab(a6)

	lea	NatureWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.w	#Nutz_VRam/32+$8000,TEMET_Prio(a6)
	move.l	#Nature_Leveltable,Glo_Leveltable(a6)
	st	Y_Dead_Allowed(a6)
	move.l	#GemVram_Nature,GemVramAdrs(a6)

	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#SN_MOV_X_WAIT_I-Bob_Info_Start,2*SN_MOV_X_WAIT(a1)
	move	#SN_MOV_X_MOVE_I-Bob_Info_Start,2*SN_MOV_X_MOVE(a1)
	move	#SN_MOV_Y_WAIT_I-Bob_Info_Start,2*SN_MOV_Y_WAIT(a1)
	move	#SN_MOV_Y_MOVE_I-Bob_Info_Start,2*SN_MOV_Y_MOVE(a1)
	move	#SN_MOV_X_WAIT_I-Bob_Info_Start,2*SN_MOV_KREIS(a1)
	move	#SN_MOV_X_WAIT_I-Bob_Info_Start,2*SN_MOV_W_WAIT(a1)
	move	#SN_MOV_X_MOVE_I-Bob_Info_Start,2*SN_MOV_W_MOVE(a1)
	move	#SN_MOV_X_WAIT_I-Bob_Info_Start,2*SN_MOV_W_NOTHING(a1)

	move	#SN_STONE_I-Bob_Info_Start,2*SN_STONE(a1)

	move	#SN_BIENE_I-Bob_Info_Start,2*SN_BIENE(a1)
	move	#SN_BIENE_LEFT_I-Bob_Info_Start,2*SN_BIENE_LEFT(a1)

	move	#SN_BUMPER_BROWN_I-Bob_Info_Start,2*SN_BUMPER_BROWN(a1)
	move	#SN_BUMPER_GREEN_I-Bob_Info_Start,2*SN_BUMPER_GREEN(a1)
	move	#SN_BUMPER_RED_I-Bob_Info_Start,2*SN_BUMPER_RED(a1)

	move	#Gl_EFF_W_UP_I-Bob_Info_Start,2*SN_EF_W_UP(a1)
	move	#Gl_EFF_W_DOWN_I-Bob_Info_Start,2*SN_EF_W_DOWN(a1)
	move	#Gl_WATER_COME_I-Bob_Info_Start,2*SN_WATER_COME(a1)

	move	#SN_EI_I-Bob_Info_Start,2*SN_EI(a1)
	move	#SN_HUHN_I-Bob_Info_Start,2*SN_HUHN(a1)
	move	#SN_HUHN_LEFT_I-Bob_Info_Start,2*SN_HUHN_LEFT(a1)
	move	#SN_HUHN_ATTACK_I-Bob_Info_Start,2*SN_HUHN_ATTACK(a1)
	move	#SN_HUHN_ATTACK_LEFT_I-Bob_Info_Start,2*SN_HUHN_ATTACK_LEFT(a1)
	move	#SN_HUHN_STONE_I-Bob_Info_Start,2*SN_HUHN_STONE(a1)
	move	#SN_HUHN_STONE_LEFT_I-Bob_Info_Start,2*SN_HUHN_STONE_LEFT(a1)
	move	#NH_HUHN_FEDER_I-Bob_Info_Start,2*NH_HUHN_FEDER(a1)
	move	#NH_HUHN_BLATT_I-Bob_Info_Start,2*NH_HUHN_BLATT(a1)
	move	#SN_HUHN_BUSH_I-Bob_Info_Start,2*SN_HUHN_BUSH(a1)

	move	#S_EXTRAK_Na_I-Bob_Info_Start,d0
	jsr	Init_Globals

		*NATURE
	move.w	#5*64,UnderWaterMax(a6)
	move.w	#6,UnderWaterShift(a6)
	move.w	#0,UnderWaterTest(a6)

	moveq	#2,d0
	moveq	#0,d1
	bsr	Play_Song

	rts

.Init_Inka:
	cmp.w	#5,Glo_Level(a6)
	bne.s	.no_inkabonus
	move.w	#ISLAND_TEKKNO,Glo_Welt(a6)
	bra	.Init_Tekkno

.no_inkabonus:
	move.l	#-1,(a5)
	jsr	Init_InkaParallax
	move.l	#INKA_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

;	moveq	#5,d7
;	bsr	Init_Slots

	lea	Inka_world_bin_p,a0
	move.w	#260,d0			;Macro-Anzahl
	bsr	Load_World
	move.l	#Inka_Coltab,Base_Coltab(a6)

	lea	InkaWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.w	#Nutz_VRam/32,TEMET_Prio(a6)
	move.l	#Inka_Leveltable,Glo_Leveltable(a6)
	st	Y_Dead_Allowed(a6)

	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#SN_HUHN_STONE_LEFT_I-Bob_Info_Start,2*SN_HUHN_STONE_LEFT(a1)
	move	#SI_MOVER_X_Wait_I-Bob_Info_Start,2*SI_MOVER_X_Wait(a1)
	move	#SI_MOVER_X_Move_I-Bob_Info_Start,2*SI_MOVER_X_Move(a1)
	move	#SI_MOVER_Y_Wait_I-Bob_Info_Start,2*SI_MOVER_Y_Wait(a1)
	move	#SI_MOVER_Y_Move_I-Bob_Info_Start,2*SI_MOVER_Y_Move(a1)
	move	#SI_BUMPER_I-Bob_Info_Start,2*SI_BUMPER(a1)
	move	#SI_FISH_RIGHT_I-Bob_Info_Start,2*SI_FISH_RIGHT(a1)
	move	#SI_FISH_LEFT_I-Bob_Info_Start,2*SI_FISH_LEFT(a1)
	move	#SI_FLEDERMAUS_I-Bob_Info_Start,2*SI_FLEDERMAUS(a1)
	move	#SI_STONE_I-Bob_Info_Start,2*SI_STONE(a1)
	move	#SI_STONE_EFF_I-Bob_Info_Start,2*SI_STONE_EFF(a1)
	move	#SI_DOOR_I-Bob_Info_Start,2*SI_DOOR(a1)
	move	#SI_SPEER_RIGHT_I-Bob_Info_Start,2*SI_SPEER_RIGHT(a1)
	move	#SI_SPEER_LEFT_I-Bob_Info_Start,2*SI_SPEER_LEFT(a1)
	move	#SI_SPEER_UP_I-Bob_Info_Start,2*SI_SPEER_UP(a1)
	move	#SI_SPEER_DOWN_I-Bob_Info_Start,2*SI_SPEER_DOWN(a1)
	move	#SI_DOOR_BUT_I-Bob_Info_Start,2*SI_DOOR_BUT(a1)
	move	#SI_FALLEN_AUSL_GROUND1_I-Bob_Info_Start,2*SI_FALLEN_AUSL_GROUND1(a1)
	move	#SI_FALLEN_AUSL_GROUND2_I-Bob_Info_Start,2*SI_FALLEN_AUSL_GROUND2(a1)
	move	#SI_AUSLSER_I-Bob_Info_Start,2*SI_AUSLSER(a1)
	move	#SI_FFACKEL_I-Bob_Info_Start,2*SI_FFACKEL(a1)
	move	#SI_HUHN_RIGHT_I-Bob_Info_Start,2*SI_HUHN_RIGHT(a1)
	move	#SI_HUHN_LEFT_I-Bob_Info_Start,2*SI_HUHN_LEFT(a1)
	move	#SI_SEILBAHN_I-Bob_Info_Start,2*SI_SEILBAHN(a1)
	move	#SI_LAVA_UP_I-Bob_Info_Start,2*SI_LAVA_UP(a1)
	move	#SI_LAVA_DOWN_I-Bob_Info_Start,2*SI_LAVA_DOWN(a1)
	move	#Gl_EFF_W_UP_I-Bob_Info_Start,2*SI_EF_W_UP(a1)
	move	#Gl_EFF_W_DOWN_I-Bob_Info_Start,2*SI_EF_W_DOWN(a1)
	move	#Gl_WATER_COME_I-Bob_Info_Start,2*SI_WATER_COME(a1)

	move	#SI_LAVAFLAME_1_I-Bob_Info_Start,2*SI_LAVAFLAME_1(a1)
	move	#SI_LAVAFLAME_2_I-Bob_Info_Start,2*SI_LAVAFLAME_2(a1)
	move	#SI_LAVAFLAME_3_I-Bob_Info_Start,2*SI_LAVAFLAME_3(a1)
	move	#SI_FIRE_I-Bob_Info_Start,2*SI_FIRE(a1)

	move	#S_EXTRAK_In_I-Bob_Info_Start,d0
	jsr	Init_Globals

		*INKA
	move.w	#5*64,UnderWaterMax(a6)
	move.w	#6,UnderWaterShift(a6)
	move.w	#0,UnderWaterTest(a6)

	moveq	#5,d0
	moveq	#0,d1
	bsr	Play_Song

	rts

.Init_Mickey:

	jmp	Init_Mickey

.Init_Warpzone:
	move.l	#MakeWarpPara,(a5)+
	move.l	#-1,(a5)

	jsr	Init_SkyParallax

	move.l	#SKY_Block_Entry_Adrs,Scr_Block_EntryAdrs(a6)

	lea	Sky_world_bin_p,a0
	move.w	#160,d0					;Macro-Anzahl
	bsr	Load_World
	move.l	#Warp_Coltab,Base_Coltab(a6)
	lea	SkyWorldLoadList(pc),a0
	bsr	Execute_LoadList

	move.w	#Nutz_VRam/32,TEMET_Prio(a6)
	move.l	#Warp_Leveltable,Glo_Leveltable(a6)
	st	Y_Dead_Allowed(a6)			;Kein rausfallen.
	move.l	#GemVram_Sky,GemVramAdrs(a6)
	move.w	#1023,Scr_X_Mask(a6)			;Frs Endlos-Scrollen
	clr.w	Scr_X_Min(a6)				;Frs Endlos-Scrollen

	*--*Write Infos for Warp !!
	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#Warp_Shoot_I-Bob_Info_Start,2*WARP_SHOOT(a1)
	move	#Warp_HitPoint_I-Bob_Info_Start,2*WARP_POINT(a1)
	move	#Warp_Drop_I-Bob_Info_Start,2*WARP_DROP(a1)
	move	#Wave1_I-Bob_Info_Start,2*WARP_WAVE1(a1)
	move	#Wave2_I-Bob_Info_Start,2*WARP_WAVE2(a1)
	move	#Wave3_I-Bob_Info_Start,2*WARP_WAVE3(a1)
	move	#Wave4_I-Bob_Info_Start,2*WARP_WAVE4(a1)
	move	#Wave5_I-Bob_Info_Start,2*WARP_WAVE5(a1)
	move	#Wave6_I-Bob_Info_Start,2*WARP_WAVE6(a1)
	move	#Wave7_I-Bob_Info_Start,2*WARP_WAVE7(a1)
	move	#Wave8_I-Bob_Info_Start,2*WARP_WAVE8(a1)
	move	#Wave9_I-Bob_Info_Start,2*WARP_WAVE9(a1)
	move	#Wave10_I-Bob_Info_Start,2*WARP_WAVE10(a1)
	move	#Wave11_I-Bob_Info_Start,2*WARP_WAVE11(a1)
	move	#Huhn_I-Bob_Info_Start,2*WARP_HUHN(a1)
	move	#Exit1_I-Bob_Info_Start,2*WARP_EXIT1(a1)
	move	#Exit2_I-Bob_Info_Start,2*WARP_EXIT2(a1)
	move	#Exit3_I-Bob_Info_Start,2*WARP_EXIT3(a1)
	move	#Exit4_I-Bob_Info_Start,2*WARP_EXIT4(a1)
	move	#Warp_Fire_I-Bob_Info_Start,2*WARP_FIRE(a1)
	move	#Warp_Hitpoint2_I-Bob_Info_Start,2*HITPOINT(a1)

	move	#Switch_Tekkno_I-Bob_Info_Start,2*WARP_SWITCH_TEKKNO(a1)
	move	#Switch_Under_I-Bob_Info_Start,2*WARP_SWITCH_UNDER(a1)
	move	#Switch_Nature_I-Bob_Info_Start,2*WARP_SWITCH_NATURE(a1)
	move	#Switch_Inka_I-Bob_Info_Start,2*WARP_SWITCH_INKA(a1)
	move	#Switch_Water_I-Bob_Info_Start,2*WARP_SWITCH_WATER(a1)
	move	#Warp_Particle_I-Bob_Info_Start,2*WARP_PARTICLE(a1)
	move.w	#Warp_I_Gem1-Bob_Info_Start,2*GEMC1(a1)
	move.w	#Warp_I_Gem2-Bob_Info_Start,2*GEMC2(a1)

	lea	TEMET_Supervisor,a0			;Warp-zone Steuerung
	bsr	Search_Mickey_Main			;initialisieren.
	move.l	#TEMET_WarpSupervisor,(a5)

	lea	Scroll,a0				;Wap-zone Scroller
	bsr	Search_Mickey_Main			;initialisieren.
	move.l	#WarpScroll,(a5)

	jsr	Init_Warpzone

	moveq	#7,d0
	moveq	#0,d1
	bra	Play_Song

Play_Song:
	tst.b	Glo_Spur(a6)
	bne.s	.no_song
	move.b	d0,SongFile(a6)
	move.b	d1,SongNr(a6)
	jsr	TFMX+4
	move.l	d1,d0
	jsr	TFMX+8
.no_song:
	rts

Init_Globals:
	lea	Bob_Info_Tab_Adrs(a6),a1
	move	#S_EXTRALAMP_I-Bob_Info_Start,2*S_EXTRALAMP(a1)
	move	d0,2*S_EXTRAK_01(a1)
	move	d0,2*S_EXTRAK_02(a1)
	move	d0,2*S_EXTRAK_03(a1)
	move	d0,2*S_EXTRAK_04(a1)
	move	d0,2*S_EXTRAK_05(a1)
	move	d0,2*S_EXTRAK_06(a1)
	move	d0,2*S_EXTRAK_07(a1)
	move	d0,2*S_EXTRAK_08(a1)
	move	d0,2*S_EXTRAK_09(a1)
	move	d0,2*S_EXTRAK_10(a1)
	move	d0,2*S_EXTRAK_11(a1)
	move	d0,2*S_EXTRAK_12(a1)
	move	d0,2*S_EXTRAK_13(a1)
	move	d0,2*S_EXTRAK_14(a1)
	move	d0,2*S_EXTRAK_15(a1)
	move	d0,2*S_EXTRAK_16(a1)
	move	d0,2*S_EXTRAK_17(a1)
	move	d0,2*S_EXTRAK_18(a1)
	move	d0,2*S_EXTRAK_19(a1)
	move	#S_KEYPOINT_I-Bob_Info_Start,2*S_KEYPOINT(a1)

	rts

Warp_Leveltable:
	dc.l	warpshoot.toon2.enemy.segap,warpshoot.toon2.segap
	dc.w	0,20*16,-1
	dc.l	warpshoot.toon1.enemy.segap,warpshoot.toon1.segap
	dc.w	0,20*16,-1
	dc.l	warpshoot.toon3.enemy.segap,warpshoot.toon3.segap
	dc.w	0,20*16,-1
	dc.l	warpshoot.toon4.enemy.segap,warpshoot.toon4.segap
	dc.w	0,20*16,-1

SkyWorldLoadList:
	dc.w	0,Sky_EnemyVRam
	dc.l	SKY_ene1_bin_p

	dc.w	0,Sky_Enemy2VRam
	dc.l	SKY_ene2_bin_p

	dc.w	-1

Sky_Leveltable:
	dc.l	SKY.md.1.enemy.segap,SKY.md.1.segap
	dc.w	073*16,006*16,-1
	dc.l	SKY.md.2.enemy.segap,SKY.md.2.segap
	dc.w	008*16,004*16,-1
	dc.l	SKY.md.3.enemy.segap,SKY.md.3.segap
	dc.w	235*16,005*16,-1
	dc.l	SKY.md.4.enemy.segap,SKY.md.4.segap
	dc.w	140*16,004*16,-1

WaterWorldLoadList:
	dc.w	0,Water_EnemyVRam
	dc.l	Water_ene_bin_p

	dc.w	256,Water_BlackVRam
	dc.l	BLACK_raw

	dc.w	-1

Water_Leveltable:
	dc.l	WATER.md.5.enemy.segap,WATER.md.5.segap		;4
	dc.w	187*16,017*16,-1
	dc.l	WATER.md.6.enemy.segap,WATER.md.6.segap		;5
	dc.w	017*16,035*16,-1
	dc.l	WATER.md.7.enemy.segap,WATER.md.7.segap		;6
	dc.w	188*16,017*16,-1
	dc.l	WATER.md.9.enemy.segap,WATER.md.9.segap		;8
	dc.w	119*16,027*16,-1
	dc.l	WATER.md.8.enemy.segap,WATER.md.8.segap		;7
	dc.w	186*16,061*16,5
	dc.l	WATER.md.10.enemy.segap,WATER.md.10.segap	;9
	dc.w	108*16,122*16,-1

UnderWorldLoadList:
	dc.w	256,Under_WaterVRam
	dc.l	WATER_raw

	dc.w	0,Under_ParaVRam
	dc.l	Under_para1_bin_p

	dc.w	0,Under_Para2VRam
	dc.l	Under_para2_bin_p

	dc.w	0,Under_EnemyVRam
	dc.l	Under_ene_bin_p

	dc.w	-1

Under_Leveltable:
	dc.l	UNDER.tp1a.enemy.segap,UNDER.tp1a.segap		;5
	dc.w	125*16,042*16,-1
	dc.l	UNDER.Level1a.enemy.segap,UNDER.Level1a.segap	;0
	dc.w	146*16,041*16,-1
	dc.l	UNDER.TP2a.enemy.segap,UNDER.TP2a.segap		;7
	dc.w	289*16,010*16,-1
	dc.l	UNDER.S2a.enemy.segap,UNDER.S2a.segap		;3
	dc.w	160*16,022*16,-1
	dc.l	UNDER.S1a.enemy.segap,UNDER.S1a.segap		;2
	dc.w	011*16,029*16,-1

	dc.l	UNDER.S2b.enemy.segap,UNDER.S2b.segap		;4
	dc.w	138*16,016*16,-1
	dc.l	UNDER.tp1b.enemy.segap,UNDER.tp1b.segap		;6
	dc.w	010*16,012*16,-1
	dc.l	UNDER.Level1b.enemy.segap,UNDER.Level1b.segap	;1
	dc.w	158*16,079*16,-1

TekknoWorldLoadList:
	dc.w	0,Tekkno_EnemyVRam
	dc.l	Tekkno_ene_bin_p
	dc.w	0,Tekkno_ParaVRam
	dc.l	Tekkno_para1_bin_p
	dc.w	352,Tekkno_Para2VRam
	dc.l	Tekkno_para2_raw
	dc.w	512,Tekkno_SpriteVRam
	dc.l	Tekkno_sprite_raw
	dc.w	256,Under_WaterVRam
	dc.l	WATER_raw

	dc.w	-1

Tekkno_Leveltable:
	dc.l	TEKKNO.Alev1a.enemy.segap,TEKKNO.Alev1a.segap
	dc.w	176*16,080*16,-1
	dc.l	TEKKNO.Alev1b.enemy.segap,TEKKNO.Alev1b.segap
	dc.w	172*16,057*16,-1
	dc.l	TEKKNO.Alev2a.enemy.segap,TEKKNO.Alev2a.segap
	dc.w	123*16,007*16,-1
	dc.l	TEKKNO.Alev2b.enemy.segap,TEKKNO.Alev2b.segap
	dc.w	127*16,013*16,-1
	dc.l	TEKKNO.Alev3a.enemy.segap,TEKKNO.Alev3a.segap
	dc.w	102*16,065*16,-1
	dc.l	TEKKNO.Alev4a.enemy.segap,TEKKNO.Alev4a.segap
	dc.w	070*16,039*16,-1

NatureWorldLoadList:
	dc.w	256,Nature_WaterVRam
	dc.l	Natur_Water_raw

	dc.w	0,Nature_ParaVRam
	dc.l	Nature_para_bin_p

	dc.w	0,Nature_EnemyVRam
	dc.l	Nature_ene_bin_p

	dc.w	-1

Nature_Leveltable:
	dc.l	NATURE.MD02A.enemy.segap,NATURE.MD02A.segap	;1
	dc.w	198*16,39*16,-1
	dc.l	NATURE.MD01A.enemy.segap,NATURE.MD01A.segap	;0
	dc.w	180*16,57*16,-1
	dc.l	NATURE.MD01B.enemy.segap,NATURE.MD01B.segap	;7
	dc.w	212*16+8,53*16,-1
	dc.l	NATURE.MD03A.enemy.segap,NATURE.MD03A.segap	;3
	dc.w	171*16,31*16,9
	dc.l	NATURE.MD04A.enemy.segap,NATURE.MD04A.segap	;5
	dc.w	253*16,34*16,10
	dc.l	NATURE.MDfly1.enemy.segap,NATURE.MDfly1.segap	;Flug1
	dc.w	155*16,026*16,-1
	dc.l	NATURE.MDfly2.enemy.segap,NATURE.MDfly2.segap	;Flug2
	dc.w	153*16,026*16,-1
	dc.l	NATURE.MDfly3.enemy.segap,NATURE.MDfly3.segap	;Flug3
	dc.w	$8000+033*16,019*16,-1
	dc.l	NATURE.MD02B.enemy.segap,NATURE.MD02B.segap	;2
	dc.w	187*16,33*16,-1

	dc.l	NATURE.MD03B.enemy.segap,NATURE.MD03B.segap	;4
	dc.w	174*16+8,53*16,-1
	dc.l	NATURE.MD04B.enemy.segap,NATURE.MD04B.segap	;6
	dc.w	285*16+8,31*16,-1

InkaWorldLoadList:
	dc.w	256,Nature_WaterVRam
	dc.l	WATER_raw

	dc.w	0,Inka_ParaVRam
	dc.l	Inka_para_bin_p

	dc.w	0,Inka_EnemyVRam
	dc.l	Inka_ene_bin_p

	dc.w	-1

Inka_Leveltable:
	dc.l	MDINKA.Level002A.enemy.segap,MDINKA.Level002A.segap	;4
	dc.w	143*16,25*16,-1
	dc.l	MDINKA.Level001A.enemy.segap,MDINKA.Level001A.segap	;2
	dc.w	267*16,20*16,-1
	dc.l	MDINKA.Level001B.enemy.segap,MDINKA.Level001B.segap	;3
	dc.w	318*16,24*16,-1
	dc.l	MDINKA.Level000A.enemy.segap,MDINKA.Level000A.segap	;0
	dc.w	235*16,77*16,-1
	dc.l	MDINKA.Level000B.enemy.segap,MDINKA.Level000B.segap	;1
	dc.w	095*16,15*16,6
	dc.l	MDINKA.Level000B.enemy.segap,MDINKA.Level000B.segap	;1
	dc.w	095*16,15*16,-1
	dc.l	MDINKA.Level002B.enemy.segap,MDINKA.Level002B.segap	;5
	dc.w	115*16+8,44*16,-1

Init_Game:
	bsr	Init_Hardware

	bsr	InitDMA
	bsr	Init_TEMET_Supervisor
	bsr	Init_Scores
	bsr	Init_Scroll
	bsr	Sigel_Init
	bsr	Bob_System_Init

	lea	Fade_Struktur(a6),a0
	move.w	#64-1,d0
	jsr	Init_Fadeing

	lea	GlobalLoadList(pc),a0
	bsr	Execute_LoadList

	move.l	#Copper_Nop,Copper_List(a6)

	clr.w	Glo_QuitCount(a6)
	sf	Akt_Copper_Frame(a6)
	sf	Glo_JoyPad(a6)
	sf	button_pressed_flags(a6)
	move.l	#GemVram_Default,GemVramAdrs(a6)
	clr.w	Open_Door_But(a6)
	clr.w	Water_Moves(a6)
	clr.l	Last_Water_Move_Eff(a6)
	clr.w	Venti_Off_But(a6)
	clr.b	Trainer_Return(a6)

	lea	Main_Rout_Table(a6),a5
	move.l	#Scroll,(a5)+
	move.l	#Show_Scores,(a5)+
	move.l	#Show_Player_Setup,(a5)+
	move.l	#Bob_System,(a5)+
	move.l	#TEMET_Supervisor,(a5)+
	move.l	#Show_Player,(a5)+
	move.l	#Area_Check,(a5)+
;:-)	move.l	#Handle_Slots,(a5)+
;	move.l	#Not_Scroller,(a5)+
;	move.l	#Prf_CheckSum,(a5)+
	move.l	#FadeControler,(a5)+
	move.l	#Display_Exit,(a5)+
	move.l	#-1,(a5)
	rts

GlobalLoadList:
	dc.w	0,Extras_VRam
	dc.l	Extras_bin_p
	dc.w	0,Flames_VRam
	dc.l	Extras2_bin_p
	dc.w	256,Exit2_VRam
	dc.l	Extras3_raw
	dc.w	-1

; ==========================================================================
;
; Fgt eine Routine in die 'Main_Rout_Table' ein.
; Diese mu bereits durch die Default-Belegung definiert sein.
;
; a0 = Zeiger auf die Stelle in der Main_Rout_Table, wo die neue Routine
;      eingefgt wird.
; a1 = Zeiger auf die einzufgende Routine
;
; ==========================================================================

Insert_Main_Rout:
	lea	Main_Rout_Table+17*4(a6),a5
.loop:
	move.l	-(a5),4(a5)
	cmp.l	a5,a0
	bne.s	.loop
	move.l	a1,(a0)
	rts

; ==========================================================================
;
; Hngt eine Routine an die 'Main_Rout_Table' an.
;
; a0 = Zeiger auf die anzuhngende Routine
;
; ==========================================================================

Append_Main_Rout:
	lea	Main_Rout_Table(a6),a5
.loop:
	cmp.l	#-1,(a5)+
	bne.s	.loop
	move.l	a0,-4(a5)
	move.l	#-1,(a5)
	rts

; ==========================================================================
;
; Fgt eine Routine in die 'Main_Rout_Table' ein.
; Diese mu bereits durch die Default-Belegung definiert sein.
;
; a0 = Zeiger auf die Routine, die NACH der einzufgenden stehen soll
; a1 = Zeiger auf die einzufgende Routine
;
; ==========================================================================

Insert_Mickey_Main	lea	Main_Rout_Table(a6),a5
		moveq	#-1,d0
.Loop		cmp.l	(a5)+,d0
		bne	.Loop
.Loop_Search	move.l	-(a5),LONG(a5)
		cmp.l	(a5),a0
		bne	.Loop_Search
		move.l	a1,(a5)
		rts

; ==========================================================================
;
; Sucht eine Routine in der 'Main_Rout_Table'.
;
; a0 = Zeiger auf zu suchende Routine	d0 = Nummer des Eintrages
;					     der Routine oder -1
;					a5 = Zeiger auf Eintrag
;					     in der MainRoutTable
;
; ==========================================================================

Search_Mickey_Main:
		lea	Main_Rout_Table(a6),a5
		moveq	#0,d0
.Loop		cmp.l	(a5),a0
		beq	.Done
		addq	#1,d0
		cmp.l	#-1,(a5)+
		bne	.Loop
		moveq	#-1,d0
.Done		rts

; ==========================================================================
;
; Game beenden
;
; ==========================================================================

Quit_Game:
	move.b	d0,Return_Code(a6)

	st	Dont_Render(a6)			;Bitte keine Farben in die Copperlist schreiben.

		movem.l	d0-d7/a0-a5,-(sp)
		move.w	#40,Glo_QuitCount(a6)
		lea	Fade_Struktur(a6),a0
		move.l	Base_Coltab(a6),a1
		lea	Black_Coltab(pc),a2
		move.w	#64-1,d0
		jsr	Init_Transformation
		move.w	#1,Fade_Speed(a0)

		move.l	Init_ParaFadeOut(a6),a0
		jsr	(a0)

	lea	TEMET_Supervisor,a0
	bsr	Search_Mickey_Main
	tst.w	d0
	bmi.s	.not_found0
	move.l	#RoutRts,(a5)
.not_found0:
	lea	Scroll,a0
	bsr	Search_Mickey_Main
	tst.w	d0
	bmi.s	.not_found1
	move.l	#RoutRts,(a5)
.not_found1:

	clr.w	Scr_X_Real_Speed(a6)
	clr.w	Scr_Y_Real_Speed(a6)

		movem.l	(sp)+,d0-d7/a0-a5

		rts

; ==========================================================================
;
; Debug Routinen
;
; ==========================================================================

	IFNE	Coords
Add_Coord_Sprites:
	lea	Numbers_raw,a0
	move.w	#32*16,d0
	lea	$be00,a1
	bsr	AddDMA

	move.l	Sig_VRam_Pointer(a6),a4
	move.w	Sig_LinkData(a6),d4

	move.w	#128+116,d0		;Xpos
	move.w	#128+160,d1		;Ypos

	moveq	#0,d2
	move.w	Scr_X_Level_Pos(a6),d2
	lsr.w	#4,d2
	bsr	.write_3digits
	addq.w	#8,d0
	moveq	#0,d2
	move.w	Scr_Y_Level_Pos(a6),d2
	lsr.w	#4,d2
	bsr	.write_3digits
	add.w	#16,d0

	moveq	#0,d2
	move.b	Message_Nummer+Message_Struktur,d2
	addq.w	#1,d2
	bsr	.write_char
	tst.w	Glo_Kette(a6)
	bmi.s	.not_first_part
	moveq	#$a,d2
	bsr	.write_char
	bra.s	.Level_ready
.not_first_part:
	tst.b	Message_Custom+1+Message_Struktur
	beq.s	.Level_ready
	moveq	#$b,d2
	bsr	.write_char
.Level_ready:

	move.w	d4,Sig_LinkData(a6)
	move.l	a4,Sig_VRam_Pointer(a6)

	rts

.write_3digits:
	divu	#100,d2
	bsr	.write_char
	clr.w	d2
	swap	d2
	divu	#10,d2
	bsr	.write_char
	swap	d2
	bra	.write_char

.write_2digits:
	divu	#10,d2
	bsr	.write_char
	swap	d2
	bra	.write_char

.write_char:
	move.w	d1,(a4)+
	move.b	#$00,(a4)+
	move.b	d4,(a4)+
	add.w	#$e000+1520,d2
	move.w	d2,(a4)+
	move.w	d0,(a4)+

	addq.w	#8,d0
	addq.w	#1,d4
	rts

	ENDC

	IFNE	Debug

Conv_Dec_to_BCD:
	and.l	#$ffff,d0
	divu	#10,d0
	swap	d0
	clr.w	d1
	move.w	d0,d1
	ror.w	#4,d1
	clr.w	d0
	swap	d0
	divu	#10,d0
	swap	d0
	or.w	d0,d1
	ror.w	#4,d1
	clr.w	d0
	swap	d0
	divu	#10,d0
	swap	d0
	or.w	d0,d1
	ror.w	#4,d1
	clr.w	d0
	swap	d0
	divu	#10,d0
	swap	d0
	or.w	d0,d1
	ror.w	#4,d1
	move.w	d1,d0
	rts

DebugTable:
	bsr	JoyPad
	btst	#PAD_A,d0
	beq	.no_debugtable

	move.w	#$2700,sr

	bsr	initio

	lea	header(pc),a0
	bsr	print_text

	lea	Bob_Structure(a6),a0
	move.w	#BOB_MAXIMUM-1,d7
.loop:
	tst.b	Bob_Used(a0)
	bmi.s	.next
	move.w	Bob_Number(a0),d2
	bsr	print_byte

	move.l	a0,d2
	bsr	print_long

	move.w	Bob_X_Position(a0),d2
	bsr	print_word

	move.w	Bob_Y_Position(a0),d2
	bsr	print_word

	move.w	Bob_Special_1(a0),d2
	bsr	print_word

	move.w	Bob_Special_2(a0),d2
	bsr	print_word

	move.w	Bob_Special_3(a0),d2
	bsr	print_word

	move.w	Bob_Special_4(a0),d2
	bsr	print_word

	move.l	Bob_Koords_Save1(a0),d2
	bsr	print_long

	move.l	Bob_Koords_Save2(a0),d2
	bsr	print_long

	move.l	Bob_Plane_Order(a0),d2
	bsr	print_long

	move.w	Bob_Hit(a0),d2
	bsr	print_word

	moveq	#10,d0
	bsr	co

.next:
	lea	BOB_ENTRY_LENGTH(a0),a0
	dbf	d7,.loop

	move.w	#$2300,sr

.no_debugtable:
	rts

print_long:
	move.l	d2,-(sp)
	swap	d2
	lsr.w	#8,d2
	bsr	byte_out
	move.l	(sp),d2
	swap	d2
	bsr	byte_out
	move.l	(sp),d2
	lsr.w	#8,d2
	bsr	byte_out
	move.l	(sp)+,d2
	bsr	byte_out
	moveq	#" ",d0
	bra	co

print_word:
	move.w	d2,-(sp)
	lsr.w	#8,d2
	bsr	byte_out
	move.w	(sp)+,d2
	bsr	byte_out
	moveq	#" ",d0
	bra	co

print_byte:
	bsr	byte_out
	moveq	#" ",d0
	bra	co

byte_out:
	lea	hextable(pc),a1
	move.b	d2,d1
	lsr.b	#4,d1
	and.w	#15,d1
	move.b	(a1,d1.w),d0
	bsr	co
	move.b	d2,d1
	and.w	#15,d1
	move.b	(a1,d1.w),d0
	bsr	co
	rts

print_text:
	moveq	#0,d0
.prloop:
	move.b	(a0)+,d0
	beq.s	.end
	bsr	co
	bra.s	.prloop
.end:
	rts

hextable:
	dc.b	"0123456789ABCDEF"

header:	dc.b	10,"BobTable",10
	dc.b	"NR -Adress- XPos YPos Spc1 Spc2 Spc3 Spc4 Koords-1 Koords-2 Planeord Hit",10,10,0

	even

CheckSum:
	lea	$10000,a0
	move.w	#20500-1,d7
	moveq	#0,d0
.loop:
	add.b	(a0)+,d0
	dbf	d7,.loop
	move.b	d0,Comp_Sum
	rts

Prf_CheckSum:
	subq.b	#1,Sum_Count
	bpl.s	.out
	move.b	#10,Sum_Count
	move.l	Scr_Level(a6),a0
	move.w	#20500-1,d7
	moveq	#0,d0
.loop:
	add.b	(a0)+,d0
	dbf	d7,.loop
	cmp.b	Comp_Sum,d0
	beq.s	.out
	move.w	#$0e0,d0
	bsr	SetColor
.out:
	rts


Comp_Sum:	dc.b	0
Sum_Count:	dc.b	0

Not_Scroller:
	clr.w	Scr_X_Speed(a6)
	clr.w	Scr_Y_Speed(a6)
	bsr	JoyPad
	btst	#2,d0
	beq.s	.no_1
	move.w	#-1,Scr_X_Speed(a6)
.no_1:
	btst	#3,d0
	beq.s	.no_2
	move.w	#1,Scr_X_Speed(a6)
.no_2:
	btst	#0,d0
	beq.s	.no_3
	move.w	#-1,Scr_Y_Speed(a6)
.no_3:
	btst	#1,d0
	beq.s	.no_4
	move.w	#1,Scr_Y_Speed(a6)
.no_4:

	rts

	ENDC

Sky_Coltab:	;Final
		dc.w	$0000,$0eee,$0EE8,$0EC0,$0E80,$0ece,$0e8e,$0c0c
		dc.w	$0080,$00AE,$000E,$000A,$0006,$0EEE,$00E8,$00C0

		dc.w	$0EE6,$00EC,$00C0,$0080,$0040,$00EE,$008E,$004C
		dc.w	$0028,$004E,$000C,$0EEE,$0000,$0000,$0000,$0000

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$00E0,$00E0,$00E0

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		dc.w	$00EA,$0444,$022A,$0006,$0EE0,$0EA0,$0E60,$0C00	;Parallax

Water_Coltab:	;Final
		dc.w	$0000,$0EE4,$0CC0,$0880,$0440,$00E0,$00E0,$0EEE
		dc.w	$0EE0,$00AE,$000E,$000A,$0006,$0A00,$0EA0,$0E60

		dc.w	$060C,$00E0,$00A0,$0080,$0040,$0EEE,$0000,$0008
		dc.w	$0EAE,$0AEE,$00CE,$006E,$000A,$0E0E,$0A0A,$0606

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$00E0,$00E0,$00E0

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		dc.w	$00EA,$0444,$022A,$0006,$0EE0,$0EA0,$0E60,$0C00	;Parallax

Under_Coltab:	;Final
		dc.w	$0000,$0EE0,$0EA0,$0E60,$0C00,$00E0,$00C0,$0080
		dc.w	$0040,$088E,$000E,$000A,$0006,$00CE,$006E,$000C

		dc.w	$0EA0,$0EAE,$0E0E,$0A0A,$0606,$0006,$0004,$0028
		dc.w	$0EEE,$0EE0,$0AC0,$0880,$0440,$00AE,$006C,$004A

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$00E0,$00E0,$00E0

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		;dc.w	$0aac,$0668,$0446,$0224,$0222,$0cce,$088a,$0eee	;Parallax
		;dc.w	$088c,$0448,$0226,$0224,$0222,$0aae,$066a,$0eee	;Pastell
		;dc.w	$08c8,$06a6,$0484,$0262,$0040,$0aea,$0000,$0eee	;Parallax
		dc.w	$0082,$0262,$0242,$0222,$0020,$00a8,$0888,$0eee	;Parallax
		;dc.w	$00c0,$0080,$0060,$0040,$0020,$00e0,$00a0,$0eee	;Parallax
		;dc.w	$00a0,$0060,$0040,$0020,$0000,$00c0,$0080,$0eee	;Parallax

Tekkno_Coltab:
		dc.w	$0000,$0ECE,$0E6E,$0A0A,$0606,$00EE,$00CA,$00A2
		dc.w	$0060,$0AAE,$044E,$000A,$0008,$000E,$000E,$000E

		dc.w	$0E6E,$0EEE,$0EE0,$0AA0,$0440,$0AAA,$0666,$0222
		dc.w	$00EE,$0EEA,$0EC0,$0E80,$0A00,$008E,$000C,$0008

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$00E0,$00E0,$00E0

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		dc.w	$0EEE,$0EAE,$0EEE,$000E,$0C40,$0C20,$0810,$0eee	;Parallax

Nature_Coltab:
		dc.w	$0000,$00EE,$00AE,$004C,$0008,$00E8,$00A0,$0060
		dc.w	$0EEC,$0EEE,$0AAE,$000E,$000A,$0EE0,$0EA0,$0E40

		dc.w	$0EEA,$00EE,$00AE,$004C,$0008,$0EE8,$0E60,$0C40
		dc.w	$0EEE,$0ECE,$0E8E,$0C0C,$0808,$0EEA,$0ECA,$0EA0

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$0EE0,$0EA0,$0E40

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		dc.w	$0008,$00EE,$00EA,$00E0,$00C0,$00A0,$0080,$0060

Inka_Coltab:
		dc.w	$0000,$06EE,$04AC,$006A,$0804,$00E8,$00C0,$0060
		dc.w	$0ECE,$0AAE,$000E,$000A,$0006,$0EAA,$0C68,$0040

		dc.w	$0CC0,$0EEA,$0CC0,$0880,$0440,$0EE8,$0EC0,$0E60
		dc.w	$0C00,$04EE,$008E,$000A,$0006,$0EEE,$0EE6,$0EA0

		dc.w	$0000,$0C88,$0ECC,$0846,$000E,$000C,$000A,$0006	;Mr-Nutz
		dc.w	$0000,$0EEE,$0EEE,$0AAA,$0666,$0EE0,$0EA0,$0E40

		dc.w	$080E,$0EEE,$0CCC,$0888,$0444,$0000,$00A0,$000E	;Status-Anzeige
		dc.w	$0008,$0CCA,$0AA0,$0880,$0660,$0440,$0220,$0020

Black_Coltab:	dcb.w	124,0

CBASE	equ	$0

	ENDC
*NEONNEONNEONNEONNEONNEON*
